/*

Boost Software License - Version 1.0 - August 17th, 2003

Permission is hereby granted, free of charge, to any person or organization
obtaining a copy of the software and accompanying documentation covered by
this license (the "Software") to use, reproduce, display, distribute,
execute, and transmit the Software, and to prepare derivative works of the
Software, and to permit third-parties to whom the Software is furnished to
do so, all subject to the following:

The copyright notices in the Software and this entire statement, including
the above license grant, this restriction and the following disclaimer,
must be included in all copies of the Software, in whole or in part, and
all derivative works of the Software, unless such copies or derivative
works are solely in the form of machine-executable object code generated by
a source language processor.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
DEALINGS IN THE SOFTWARE.

*/
module derelict.sfml2.systemfunctions;

private
{
    import derelict.sfml2.systemtypes;
}

extern(C)
{
    alias nothrow sfClock* function() da_sfClock_create;
    alias nothrow sfClock* function(const(sfClock)* clock) da_sfClock_copy;
    alias nothrow void function(sfClock* clock) da_sfClock_destroy;
    alias nothrow sfTime function(const(sfClock*) clock) da_sfClock_getElapsedTime;
    alias nothrow sfTime function(sfClock* clock) da_sfClock_restart;
    alias nothrow sfMutex* function() da_sfMutex_create;
    alias nothrow void function(sfMutex* mutex) da_sfMutex_destroy;
    alias nothrow void function(sfMutex* mutex) da_sfMutex_lock;
    alias nothrow void function(sfMutex* mutex) da_sfMutex_unlock;
    alias nothrow void function(sfTime duration) da_sfSleep;
    alias nothrow sfThread* function(void function(void*),void* userData) da_sfThread_create;
    alias nothrow void function(sfThread* thread) da_sfThread_destroy;
    alias nothrow void function(sfThread* thread) da_sfThread_launch;
    alias nothrow void function(sfThread* thread) da_sfThread_wait;
    alias nothrow void function(sfThread* thread) da_sfThread_terminate;
    alias nothrow float function(sfTime time) da_sfTime_asSeconds;
    alias nothrow sfInt32 function(sfTime time) da_sfTime_asMilliseconds;
    alias nothrow sfInt64 function(sfTime time) da_sfTime_asMicroseconds;
    alias nothrow sfTime function(float amount) da_sfSeconds;
    alias nothrow sfTime function(sfInt32 amount) da_sfMilliseconds;
    alias nothrow sfTime function(sfInt64 amount) da_sfMicroseconds;
}

__gshared
{
    da_sfClock_create sfClock_create;
    da_sfClock_copy sfClock_copy;
    da_sfClock_destroy sfClock_destroy;
    da_sfClock_getElapsedTime sfClock_getElapsedTime;
    da_sfClock_restart sfClock_restart;
    da_sfMutex_create sfMutex_create;
    da_sfMutex_destroy sfMutex_destroy;
    da_sfMutex_lock sfMutex_lock;
    da_sfMutex_unlock sfMutex_unlock;
    da_sfSleep sfSleep;
    da_sfThread_create sfThread_create;
    da_sfThread_destroy sfThread_destroy;
    da_sfThread_launch sfThread_launch;
    da_sfThread_wait sfThread_wait;
    da_sfThread_terminate sfThread_terminate;
    da_sfTime_asSeconds sfTime_asSeconds;
    da_sfTime_asMilliseconds sfTime_asMilliseconds;
    da_sfTime_asMicroseconds sfTime_asMicroseconds;
    da_sfSeconds sfSeconds;
    da_sfMilliseconds sfMilliseconds;
    da_sfMicroseconds sfMicroseconds;
}